home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 176-200 / 190 / nethack / een.zoo / rnd.c < prev    next >
C/C++ Source or Header  |  1988-07-24  |  924b  |  58 lines

  1. /*    SCCS Id: @(#)rnd.c      2.3     87/12/12
  2.  */
  3. #include    "config.h"
  4. /* rand() is either random() or lrand48() - see config.h. */
  5. #ifdef UNIX
  6. #define RND(x)  (rand() % (x))
  7. #else
  8. /* Good luck: the bottom order bits are cyclic. */
  9. #define RND(x)  ((rand()>>3) % (x))
  10. #endif
  11.  
  12. rn1(x,y)        /* y <= rn1(x,y) < (y+x) */
  13. register x,y;
  14. {
  15.     return(RND(x)+y);
  16. }
  17.  
  18. rn2(x)          /* 0 <= rn2(x) < x */
  19. register x;
  20. {
  21.     return(RND(x));
  22. }
  23.  
  24. rnd(x)          /* 1 <= rnd(x) <= x */
  25. register x;
  26. {
  27.     return(RND(x)+1);
  28. }
  29.  
  30. d(n,x)          /* n <= d(n,x) <= (n*x) */
  31. register n,x;
  32. {
  33.     register tmp = n;
  34.  
  35.     while(n--) tmp += RND(x);
  36.     return(tmp);
  37. }
  38.  
  39. rne(x)          /* by stewr 870807 */
  40. register x;
  41. {
  42.     register tmp = 1;
  43.     while(!rn2(x)) tmp++;
  44.     return(tmp);
  45. }
  46.  
  47. rnz(i)
  48. int i;
  49. {
  50.     register long x = i;
  51.     register long tmp = 1000;
  52.     tmp += rn2(1000);
  53.     tmp *= rne(4);
  54.     if (rn2(2)) { x *= tmp; x /= 1000; }
  55.     else { x *= 1000; x /= tmp; }
  56.     return((int)x);
  57. }
  58.